// AI服务基类
class AIServiceBase {
  constructor(config) {
    this.config = config;
    this.name = this.constructor.name.replace('Service', '').toLowerCase();
  }
  
  /**
   * 发送聊天消息
   * @param {Array} messages - 消息数组
   * @param {Object} options - 额外选项
   * @returns {Promise<Object>} AI响应
   */
  async chat(messages, options = {}) {
    throw new Error('chat method must be implemented by subclass');
  }
  
  /**
   * 生成文本
   * @param {string} prompt - 提示文本
   * @param {Object} options - 额外选项
   * @returns {Promise<string>} 生成的文本
   */
  async generateText(prompt, options = {}) {
    const messages = [
      { role: 'user', content: prompt }
    ];
    const response = await this.chat(messages, options);
    return response.content || response.text || '';
  }
  
  /**
   * 流式聊天（如果支持）
   * @param {Array} messages - 消息数组
   * @param {Object} options - 额外选项
   * @returns {AsyncGenerator} 流式响应
   */
  async *chatStream(messages, options = {}) {
    throw new Error('chatStream method must be implemented by subclass');
  }
  
  /**
   * 检查服务是否可用
   * @returns {Promise<boolean>} 是否可用
   */
  async isAvailable() {
    try {
      // 简单的ping测试
      const response = await this.chat([{ role: 'user', content: 'ping' }], { maxTokens: 10 });
      return !!response;
    } catch (error) {
      return false;
    }
  }
  
  /**
   * 获取服务信息
   * @returns {Object} 服务信息
   */
  getInfo() {
    return {
      name: this.name,
      enabled: this.config.enabled,
      model: this.config.model,
      maxTokens: this.config.maxTokens,
      temperature: this.config.temperature
    };
  }
  
  /**
   * 构建请求头
   * @returns {Object} 请求头
   */
  buildHeaders() {
    return {
      'Content-Type': 'application/json',
      'User-Agent': 'Second-Hand-App/1.0'
    };
  }
  
  /**
   * 处理错误
   * @param {Error} error - 错误对象
   * @param {string} operation - 操作名称
   */
  handleError(error, operation = 'AI service operation') {
    console.error(`[${this.name}] ${operation} failed:`, error.message);
    
    if (error.response) {
      // HTTP错误
      const status = error.response.status;
      const data = error.response.data;
      
      if (status === 401) {
        throw new Error(`AI服务认证失败: ${data?.error?.message || '无效的API密钥'}`);
      } else if (status === 429) {
        throw new Error(`AI服务请求频率限制: ${data?.error?.message || '请稍后重试'}`);
      } else if (status >= 500) {
        throw new Error(`AI服务内部错误: ${data?.error?.message || '服务暂时不可用'}`);
      } else {
        throw new Error(`AI服务错误 (${status}): ${data?.error?.message || error.message}`);
      }
    } else if (error.request) {
      // 网络错误
      throw new Error(`AI服务网络连接失败: ${error.message}`);
    } else {
      // 其他错误
      throw new Error(`AI服务错误: ${error.message}`);
    }
  }
}

module.exports = AIServiceBase;